{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 练习1-具有神经网络思维的Logistic回归\n",
    "--------\n",
    "## 介绍\n",
    "\n",
    "在本练习中，我们将搭建一个简单的神经网络（逻辑回归）并用于“识别猫”。\n",
    "\n",
    "在开始练习前，需要**下载如下的文件进行数据上传**：\n",
    "\n",
    "- train_catvnoncat.h5 -存储训练集数据（图像数据和标签）\n",
    "- test_catvnoncat.h5  -存储测试集数据\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 数据预处理\n",
    "### 1.1 数据加载和查看\n",
    "在开始之前，我们有需要引入的库：\n",
    "\n",
    "- numpy ：是用Python进行科学计算的基本软件包。\n",
    "- h5py：是与H5文件中存储的数据集进行交互的常用软件包。\n",
    "- matplotlib：是一个著名的库，用于在Python中绘制图表。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import h5py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，需要运行load_dataset函数来读取数据文件中所存储的数据，并返回：\n",
    "\n",
    "- train_set_x_orig ：保存的是训练集里面的图像数据(209张64x64的图像)；\n",
    "- train_set_y_orig ：保存的是训练集的图像对应的分类值，其中0表示不是猫，1表示是猫。\n",
    "- test_set_x_orig ：保存的是测试集里面的图像数据(50张64x64的图像)；\n",
    "- test_set_y_orig ： 保存的是测试集的图像对应的分类值。\n",
    "- classes ： 保存的是以字节类型保存的两个字符串数据，数据为：[b’non-cat’ b’cat’]。\n",
    "\n",
    "现在我们就要把这些数据加载到主程序里面："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-07-07T01:25:17.706414Z",
     "start_time": "2019-07-07T01:25:17.701399Z"
    }
   },
   "outputs": [],
   "source": [
    "def load_dataset():\n",
    "    train_dataset = h5py.File('train_catvnoncat.h5', \"r\")\n",
    "    train_set_x_orig = np.array(train_dataset[\"train_set_x\"][:]) # your train set features\n",
    "    train_set_y_orig = np.array(train_dataset[\"train_set_y\"][:]) # your train set labels\n",
    "\n",
    "    test_dataset = h5py.File('test_catvnoncat.h5', \"r\")\n",
    "    test_set_x_orig = np.array(test_dataset[\"test_set_x\"][:]) # your test set features\n",
    "    test_set_y_orig = np.array(test_dataset[\"test_set_y\"][:]) # your test set labels\n",
    "\n",
    "    classes = np.array(test_dataset[\"list_classes\"][:]) # the list of classes\n",
    "\n",
    "    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))\n",
    "    test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))\n",
    "\n",
    "    return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes\n",
    "\n",
    "train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-07-07T15:25:42.354989Z",
     "start_time": "2019-07-07T15:25:42.347989Z"
    }
   },
   "source": [
    "我们可以看一下加载的文件里面的图片都是些什么样子的以及存储的分类值。可以看到，当我们改变index值时，会出现不同索引值的图片，且train_set_y的值代表了该图像是否为一只猫。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_set_y=1\n",
      "y=[1], it's a cat' picture\n"
     ]
    },
    {
     "data": {
      "image/png": "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l2PJZBI33ngjDhw4QPus1WpYXFw87UcIIcSFQUdJ6I033sCePXswPj6O73//+7jrrrvwu7/7u/j2t78NAJiengYADA+fbrE+PDy8/Nn72bVrF/L5/PLP2rX8C5JCCCFWHx0loXa7jU984hPYuXMnrr32Wtx55534j//xP2LPnj2ntXv/36Sdc+bfqXfs2IFCobD8Mzk52eEUhBBCnK90lIRGR0dx1VVXnRa78sor8fbbbwMARkZGAMB765mZmfHejt4jmUyiu7v7tB8hhBAXBh0JEz71qU/hyJEjp8VeeeUVrF+/HgCwceNGjIyMYN++fbj22msBAPV6Hfv378cf/dEfdTQwB9/WyKrVFxDVk1WVtd3ilUiZN5d1VKtvS4HSMFRwllrJtX01TMOooGop7yzZC1PZJbI9tG216CvpACDVzT2xTh4z3mKZT5ihRmy1uDqsVOSqn1zOr2gJAImkr5ozvdYsOlDTWV5jljrM8lQzh0jUcZaCy1KwdVL9NQgsXzZjeKYayqhcyiZqnhNr3DzeItIs9owAgLax3qzqwc6oLurgr+em1bfRR9vwDawYijc2xkqZP2sshV3UqihN2rfJcwngvpuWypXRURL6vd/7PWzbtg07d+7Er/zKr+Af//EfsXfvXuzduxfAqcV87733YufOnRgfH8f4+Dh27tyJTCaD22+/vZNDCSGEuADoKAldf/31eOqpp7Bjxw78wR/8ATZu3Ijdu3fji1/84nKb++67D5VKBXfffTfm5+exdetWPPPMM+fuO0JCCCHOWzou5fD5z38en//8583PgyDAxMQEJiYmPsq4hBBCXADIO04IIURorNiidi7wXUmcZQFCNijbbb4xZtmlmMIEEo4YggKraFqzyS13LJufNtkUbNWrtG26f4TGK0vcAoRZ9FSX5mjbVK6HxkuFEzTeNsQTnRTpazZ4H6Ul/iXm+kA/jaddxouZRRGNuDXGTvow44adTzR65oUbOx5Lh7ZFDGPvHG3Dbqhl2RORpW+4EJkCEescRshYrBJrpnuSJcGw5k+alyrcamqpxMUDtQovXlerWMUvfSJxwyLMKBYZNQQEdXIfNo3Cko4IJCybJIbehIQQQoSGkpAQQojQUBISQggRGkpCQgghQkNJSAghRGisWHVcAF8RFDWtRIg0xZDxmEW5rHGQriNxXkit1eAKNstax1lFotq+MsUsyGZZl9S5GibI+uewRYrOAUAmP0TjhZPHeN+GdIgVGbOKwFkKnJqhNKrVeHterKwz1Rgt7AVQ4ZStSOvAtgb2dWbr1hR0dmpPxBa5IRuzCjpaRcwM5xqgxe9lekyrwFwHBenMcZtGRJy2MRZmN1Wp8OfB4gJXo9aqXB1XN+7PFrEgS3dx781igR+zXuPKO/ZYcc5SvHW43t6H3oSEEEKEhpKQEEKI0FASEkIIERpKQkIIIUJjxQkT3ttUZLUyrI3vgPh9BJa/iLXXbHiGsGizyTforD7apNYIALiIZQ3itzf2t6m9BmDXD2HtzbZ1vulvtbfibPM36PCYNcN2pGoIFiplf8PVsnIyRR8dbFpbNaaiMd53zLBsihjtmZDhbAkTIqSOTzTS2aPBOqRVN8mKMyxhQqt55sKEpvE8sOoGtY14s2HU/Kn691XFsNupVfmatax1GsY9ziyuLJFN07jfWkZdL97WECaQ5957bc/E+mrFJaGlpVMFnI68fTLkkQghhPgoLC0tIZ/3/Sp/ksB14tL4M6DdbuPYsWPI5XJYWlrC2rVrMTk5uarLfi8uLmqeq4gLYZ4XwhwBzfPD4pzD0tISxsbGPuAvDadYcW9CkUgEa9asAfCvf1bo7u5e1QvgPTTP1cWFMM8LYY6A5vlh+GlvQO8hYYIQQojQUBISQggRGis6CSWTSXz9619HMsltclYLmufq4kKY54UwR0Dz/Fmw4oQJQgghLhxW9JuQEEKI1Y2SkBBCiNBQEhJCCBEaSkJCCCFCQ0lICCFEaKzoJPRnf/Zn2LhxI1KpFK677jr83d/9XdhD+kg8++yz+MIXvoCxsTEEQYC//Mu/PO1z5xwmJiYwNjaGdDqNm266CS+99FI4g/2Q7Nq1C9dffz1yuRyGhoZw66234siRI6e1WQ3z3LNnD6655prlb5jfcMMN+Ou//uvlz1fDHN/Prl27EAQB7r333uXYapjnxMQEgiA47WdkZGT589Uwx/d499138Ru/8Rvo7+9HJpPBxz/+cRw8eHD581Dm6lYoTz75pIvH4+7RRx91L7/8srvnnntcNpt1b731VthD+9D81V/9lbv//vvdd77zHQfAPfXUU6d9/s1vftPlcjn3ne98xx0+fNj96q/+qhsdHXWLi4vhDPhD8O/+3b9zjz32mPvRj37kDh065D73uc+5devWuWKxuNxmNczz6aefdv/7f/9vd+TIEXfkyBH3ta99zcXjcfejH/3IObc65viT/OM//qPbsGGDu+aaa9w999yzHF8N8/z617/uNm3a5KamppZ/ZmZmlj9fDXN0zrm5uTm3fv1691u/9VvuH/7hH9zRo0fd//k//8e99tpry23CmOuKTUI/93M/5+66667TYldccYX7/d///ZBGdHZ5fxJqt9tuZGTEffOb31yOVatVl8/n3X/9r/81hBGeHWZmZhwAt3//fufc6p2nc8719va6//bf/tuqm+PS0pIbHx93+/btczfeeONyElot8/z617/uPvaxj9HPVsscnXPuq1/9qvv0pz9tfh7WXFfkn+Pq9ToOHjyI7du3nxbfvn07Dhw4ENKozi1Hjx7F9PT0aXNOJpO48cYbz+s5FwoFAEBfXx+A1TnPVquFJ598EqVSCTfccMOqm+OXvvQlfO5zn8Mv/MIvnBZfTfN89dVXMTY2ho0bN+LXfu3X8MYbbwBYXXN8+umnsWXLFvzyL/8yhoaGcO211+LRRx9d/jysua7IJHTy5Em0Wi0MDw+fFh8eHsb09HRIozq3vDev1TRn5xy+8pWv4NOf/jQ2b94MYHXN8/Dhw+jq6kIymcRdd92Fp556ClddddWqmuOTTz6JgwcPYteuXd5nq2WeW7duxbe//W18//vfx6OPPorp6Wls27YNs7Ozq2aOAPDGG29gz549GB8fx/e//33cdddd+N3f/V18+9vfBhDe9VxxpRx+kvdXiHTOdVw18nxjNc35y1/+Mn74wx/i7//+773PVsM8L7/8chw6dAgLCwv4zne+gzvuuAP79+9f/vx8n+Pk5CTuuecePPPMM0ilUma7832et9xyy/L/v/rqq3HDDTfgkksuweOPP45PfvKTAM7/OQKnarVt2bIFO3fuBABce+21eOmll7Bnzx78+3//75fb/aznuiLfhAYGBhCNRr3sOzMz42Xp1cJ7apzVMuff+Z3fwdNPP42//du/Xa4PBayueSYSCVx66aXYsmULdu3ahY997GP4kz/5k1Uzx4MHD2JmZgbXXXcdYrEYYrEY9u/fjz/90z9FLBZbnsv5Ps/3k81mcfXVV+PVV19dNdcSAEZHR3HVVVedFrvyyivx9ttvAwjv3lyRSSiRSOC6667Dvn37Tovv27cP27ZtC2lU55aNGzdiZGTktDnX63Xs37//vJqzcw5f/vKX8d3vfhd/8zd/g40bN572+WqZJ8M5h1qttmrm+NnPfhaHDx/GoUOHln+2bNmCL37xizh06BAuvvjiVTHP91Or1fDjH/8Yo6Ojq+ZaAsCnPvUp7+sSr7zyCtavXw8gxHvznEkePiLvSbT//M//3L388svu3nvvddls1r355pthD+1Ds7S05F588UX34osvOgDuoYceci+++OKy7Pyb3/ymy+fz7rvf/a47fPiw+/Vf//XzTgr627/92y6fz7sf/OAHp0ley+XycpvVMM8dO3a4Z5991h09etT98Ic/dF/72tdcJBJxzzzzjHNudcyR8ZPqOOdWxzz/03/6T+4HP/iBe+ONN9xzzz3nPv/5z7tcLrf8rFkNc3TulMw+Fou5P/zDP3Svvvqq+4u/+AuXyWTcf//v/325TRhzXbFJyDnnHnnkEbd+/XqXSCTcJz7xiWWZ7/nK3/7t3zoA3s8dd9zhnDslkfz617/uRkZGXDKZdJ/5zGfc4cOHwx10h7D5AXCPPfbYcpvVMM//8B/+w/LaHBwcdJ/97GeXE5Bzq2OOjPcnodUwz/e+CxOPx93Y2Ji77bbb3EsvvbT8+WqY43v8r//1v9zmzZtdMpl0V1xxhdu7d+9pn4cxV9UTEkIIERorck9ICCHEhYGSkBBCiNBQEhJCCBEaSkJCCCFCQ0lICCFEaCgJCSGECA0lISGEEKGhJCSEECI0lISEEEKEhpKQEEKI0FASEkIIERr/HwdQ0gqQ3LnrAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "index = 56\n",
    "plt.imshow(train_set_x_orig[index])\n",
    "print(\"train_set_y=\" + str(train_set_y[0][index])) \n",
    "print(\"y=\" + str(train_set_y[:,index]) + \", it's a \" + classes[np.squeeze(train_set_y[:,index])].decode(\"utf-8\") + \"' picture\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_set_y=0\n",
      "y=[0], it's a non-cat' picture\n"
     ]
    },
    {
     "data": {
      "image/png": "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95z3k5/8xNu5c6e3c+dO74EHHvBisZj3+uuve543Pub4p7zyyive+eef711++eXevffeOxQfD/N88MEHvdmzZ3tHjhwZenV2dg69Px7m6Hmed+LECW/GjBneF77wBe93v/ud19bW5v3iF7/wdu/ePdQmiLmO2ST0vve9z7vrrruGxS6++GLva1/7WkAjGl1OTULlctlrbGz0Hn744aFYNpv1UqmU9y//8i8BjHB06Ozs9AB4Gzdu9Dxv/M7T8zxvwoQJ3ve+971xN8d0Ou21trZ6GzZs8BYuXDiUhMbLPB988EHviiuuoO+Nlzl6nud99atf9a6//nrz/aDmOia/jsvn89iyZQsWLVo0LL5o0SJs2rQpoFGdWdra2tDR0TFszolEAgsXLjyr59zb2wsAqK+vBzA+51kqlbBu3ToMDAzguuuuG3dzvPvuu/Hxj38cH/nIR4bFx9M8d+3ahebmZrS0tOAzn/kM9u49WUpmPM3xueeew7x58/CpT30KU6ZMwdy5c/HEE08MvR/UXMdkEjp+/DhKpRIaGhqGxRsaGtDR0RHQqM4s78xrPM3Z8zzcd999uP766zFnzhwA42ue27dvR3V1NRKJBO666y48++yzuPTSS8fVHNetW4ctW7Zg5cqVznvjZZ7z58/HU089heeffx5PPPEEOjo6sGDBAnR1dY2bOQLA3r17sXr1arS2tuL555/HXXfdha985St46qmnAAR3PMdcKYc/5dTKgZ7njUrVxLHMeJrzPffcg23btuHXv/618954mOdFF12ErVu3oqenBz/60Y9wxx13YOPGjUPvn+1zbG9vx7333ov169ejoqLCbHe2z/Pmm28e+vdll12G6667DjNnzsTatWtx7bXXAjj75wicrNU2b948rFixAgAwd+5cvPHGG1i9ejX+9m//dqjdX3quY/JJaNKkSYhEIk727ezsdLL0eOEdNc54mfOXv/xlPPfcc/jlL385VB8KGF/zjMfjuPDCCzFv3jysXLkSV1xxBb7zne+Mmzlu2bIFnZ2duPrqqxGNRhGNRrFx40b88z//M6LR6NBczvZ5nkpVVRUuu+wy7Nq1a9wcSwBoamrCpZdeOix2ySWX4MCBAwCCuzbHZBKKx+O4+uqrsWHDhmHxDRs2YMGCBQGN6szS0tKCxsbGYXPO5/PYuHHjWTVnz/Nwzz334JlnnsELL7yAlpaWYe+Pl3kyPM9DLpcbN3O88cYbsX37dmzdunXoNW/ePNx+++3YunUrLrjggnExz1PJ5XJ488030dTUNG6OJQC8//3vd34u8fbbb2PGjBkAArw2z5jk4TR5R6L9/e9/39uxY4e3ZMkSr6qqytu3b1/QQ3vPpNNp77XXXvNee+01D4D36KOPeq+99tqQ7Pzhhx/2UqmU98wzz3jbt2/3PvvZz551UtAvfelLXiqV8l588cVhktfBwcGhNuNhnkuXLvVeeuklr62tzdu2bZv3wAMPeOFw2Fu/fr3neeNjjow/Vcd53viY5z/8wz94L774ord3717v5Zdf9v7qr/7Kq6mpGbrXjIc5et5JmX00GvW++c1vert27fJ++MMfeslk0vu3f/u3oTZBzHXMJiHP87zHH3/cmzFjhhePx72rrrpqSOZ7tvLLX/7SA+C87rjjDs/zTkokH3zwQa+xsdFLJBLeBz/4QW/79u3BDtonbH4AvCeffHKozXiY5xe/+MWhc3Py5MnejTfeOJSAPG98zJFxahIaD/N857cwsVjMa25u9m699VbvjTfeGHp/PMzxHX784x97c+bM8RKJhHfxxRd7a9asGfZ+EHNVPSEhhBCBMSbXhIQQQpwbKAkJIYQIDCUhIYQQgaEkJIQQIjCUhIQQQgSGkpAQQojAUBISQggRGEpCQgghAkNJSAghRGAoCQkhhAgMJSEhhBCB8f8DUC/Q4kVejh4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "index = 1\n",
    "plt.imshow(train_set_x_orig[index])\n",
    "print(\"train_set_y=\" + str(train_set_y[0][index])) \n",
    "print(\"y=\" + str(train_set_y[:,index]) + \", it's a \" + classes[np.squeeze(train_set_y[:,index])].decode(\"utf-8\") + \"' picture\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 数据变换\n",
    "\n",
    "接下来看一看我们加载的数据的具体信息，首先介绍三个变量的含义：\n",
    "- m_train ：训练集里图片的数量。\n",
    "- m_test ：测试集里图片的数量。\n",
    "- num_px ： 训练、测试集里面的图片的宽度和高度（均为64x64）。\n",
    "\n",
    "train_set_x_orig 是一个维度为(m_​​train，num_px，num_px，3）的数组。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集的数量: m_train = 209\n",
      "测试集的数量 : m_test = 50\n",
      "每张图片的宽/高 : num_px = 64\n",
      "每张图片的大小 : (64, 64, 3)\n",
      "训练集_图片的维数 : (209, 64, 64, 3)\n",
      "训练集_标签的维数 : (1, 209)\n",
      "测试集_图片的维数: (50, 64, 64, 3)\n",
      "测试集_标签的维数: (1, 50)\n"
     ]
    }
   ],
   "source": [
    "m_train = train_set_y.shape[1] #训练集里图片的数量。\n",
    "m_test = test_set_y.shape[1] #测试集里图片的数量。\n",
    "num_px = train_set_x_orig.shape[1] #训练、测试集里面的图片的宽度和高度（均为64x64）。\n",
    "\n",
    "#现在看一看我们加载的东西的具体情况\n",
    "print (\"训练集的数量: m_train = \" + str(m_train))\n",
    "print (\"测试集的数量 : m_test = \" + str(m_test))\n",
    "print (\"每张图片的宽/高 : num_px = \" + str(num_px))\n",
    "print (\"每张图片的大小 : (\" + str(num_px) + \", \" + str(num_px) + \", 3)\")\n",
    "print (\"训练集_图片的维数 : \" + str(train_set_x_orig.shape))\n",
    "print (\"训练集_标签的维数 : \" + str(train_set_y.shape))\n",
    "print (\"测试集_图片的维数: \" + str(test_set_x_orig.shape))\n",
    "print (\"测试集_标签的维数: \" + str(test_set_y.shape))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了方便，我们要把维度为`(64,64,3)`的numpy数组重新构造为`(64*64*3,1)`的数组，要乘以3的原因是每张图片是由`64x64`像素构成的，而每个像素点由（R，G，B）三原色构成的，所以要乘以3。\n",
    "\n",
    "在此之后，我们的训练和测试数据集是一个numpy数组，**每列代表一个平坦的图像**，应该有m_train和m_test列。\n",
    "\n",
    "当你想将形状（a，b，c，d）的矩阵X平铺成形状（b * c * d，a）的矩阵X_flatten时，可以使用以下代码：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#X_flatten = X.reshape(X.shape [0]，-1).T ＃X.T是X的转置\n",
    "#将训练集的维度降低并转置。\n",
    "train_set_x_flatten  = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T\n",
    "#将测试集的维度降低并转置。\n",
    "test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这一段意思是指把数组变为209行的矩阵（因为训练集里有209张图片）我们可以用-1使得程序算出来是12288列，我再最后用一个T表示转置，这就变成了12288行，209列。\n",
    "\n",
    "测试集的操作也一样。\n",
    "\n",
    "然后我们看看降维之后的情况是怎么样的："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集降维最后的维度： (12288, 209)\n",
      "训练集_标签的维数 : (1, 209)\n",
      "测试集降维之后的维度: (12288, 50)\n",
      "测试集_标签的维数 : (1, 50)\n"
     ]
    }
   ],
   "source": [
    "print (\"训练集降维最后的维度： \" + str(train_set_x_flatten.shape))\n",
    "print (\"训练集_标签的维数 : \" + str(train_set_y.shape))\n",
    "print (\"测试集降维之后的维度: \" + str(test_set_x_flatten.shape))\n",
    "print (\"测试集_标签的维数 : \" + str(test_set_y.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了表示彩色图像，必须为每个像素指定红色，绿色和蓝色通道（RGB），因此像素值实际上是从0到255范围内的三个数字的向量。\n",
    "\n",
    "机器学习中一个常见的预处理步骤是**对数据集进行居中和标准化**，这意味着可以减去每个示例中整个numpy数组的平均值，然后将每个示例除以整个numpy数组的标准偏差。\n",
    "\n",
    "但对于图片数据集，它更简单，更方便，几乎可以将**数据集的每一行除以255**（像素通道的最大值），因为在RGB中不存在比255大的数据，所以我们可以放心的除以255，让标准化的数据位于[0,1]之间。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-07-07T01:28:00.903593Z",
     "start_time": "2019-07-07T01:28:00.883563Z"
    }
   },
   "outputs": [],
   "source": [
    "train_set_x = train_set_x_flatten / 255\n",
    "test_set_x = test_set_x_flatten / 255"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 神经网络的搭建\n",
    "数据处理完毕后，我们需要开始搭建神经网络。\n",
    "以下是数学表达式：\n",
    "\n",
    "对于 $x(i)$:\n",
    "$${{z}^{(i)}}={{w}^{T}}{{x}^{(i)}}+b$$\n",
    "$$\\hat{y}^{(i)}=a(i)=sigmoid(z(i))$$\n",
    "$$L\\left( \\hat{y},y \\right)=-y\\log(\\hat{y})-(1-y)\\log (1-\\hat{y})$$\n",
    "\n",
    "然后通过对所有训练样例求和来计算成本:\n",
    "$$J\\left( w,b \\right)=\\frac{1}{m}\\sum\\limits_{i=1}^{m}{L\\left( {{{\\hat{y}}}^{(i)}},{{y}^{(i)}} \\right)}=\\frac{1}{m}\\sum\\limits_{i=1}^{m}{\\left( -{{y}^{(i)}}\\log {{{\\hat{y}}}^{(i)}}-(1-{{y}^{(i)}})\\log (1-{{{\\hat{y}}}^{(i)}}) \\right)}$$\n",
    "\n",
    "建立神经网络的主要步骤是： \n",
    "1. 定义模型结构（例如输入特征的数量） \n",
    "2. 初始化模型的参数 \n",
    "3. 循环：\n",
    "\n",
    "    1. 计算当前损失（正向传播）\n",
    "    2. 计算当前梯度（反向传播）\n",
    "    3. 更新参数（梯度下降）\n",
    "\n",
    "### 2.1 Sigmoid函数<span id='1'></span>\n",
    "\n",
    "现在构建sigmoid()，需要使用 $sigmoid(w ^ T x + b)$ 计算来做出预测。\n",
    "\n",
    "其中，sigmoid代表一个常用的逻辑函数为S形函数（Sigmoid function），公式为： \n",
    "\\\\[g\\left( z \\right)=\\frac{1}{1+{{e}^{-z}}}\\\\] \n",
    "\n",
    "接下来，**编写代码实现Sigmoid函数**，编写后试着测试一些值，如果`x`的正值较大，则函数值应接近1；如果`x`的负值较大，则函数值应接近0。而对于`x`等于0时，则函数值为0.5。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    \"\"\"\n",
    "    参数：\n",
    "        z  - 任何大小的标量或numpy数组。\n",
    "    返回：\n",
    "        s  -  sigmoid（z）\n",
    "    \"\"\"\n",
    "    s = 1 / (1 + np.exp(-z))\n",
    "    return s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试sigmoid====================\n",
      "sigmoid(0) = 0.5\n",
      "sigmoid(9.2) = 0.9998989708060922\n"
     ]
    }
   ],
   "source": [
    "#测试sigmoid()\n",
    "print(\"====================测试sigmoid====================\")\n",
    "print (\"sigmoid(0) = \" + str(sigmoid(0)))\n",
    "print (\"sigmoid(9.2) = \" + str(sigmoid(9.2)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 初始化参数\n",
    "接下来，在搭建神经网络之前，我们需要初始化参数w和b，将w初始化为指定维度的零向量，b初始化为0。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize_with_zeros(dim):\n",
    "    \"\"\"\n",
    "        此函数为w创建一个维度为（dim，1）的0向量，并将b初始化为0。\n",
    "        参数：\n",
    "            dim  - 我们想要的w矢量的大小（或者这种情况下的参数数量）\n",
    "        返回：\n",
    "            w  - 维度为（dim，1）的初始化向量。\n",
    "            b  - 初始化的标量（对应于偏差）\n",
    "    \"\"\"\n",
    "    w = np.zeros(shape = (dim,1))\n",
    "    b = 0\n",
    "    #使用断言来确保我要的数据是正确的\n",
    "    assert(w.shape == (dim, 1)) #w的维度是(dim,1)\n",
    "    assert(isinstance(b, float) or isinstance(b, int)) #b的类型是float或者是int\n",
    "\n",
    "    return (w , b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 成本函数和梯度<span id='2'></span>\n",
    "对参数进行初始化后，可以接着实现前向和后向传播的成本函数及其梯度，用于后续的参数学习，最小化成本。\n",
    "\n",
    "接下来，你需要**实现propagate函数，该函数用于实现前向传播的成本计算和后向传播的梯度计算**。\n",
    "\n",
    "**要点**：\n",
    "- 参数列表和返回值需要与函数说明中相同，其中返回值dw,db需要以字典的形式进行返回；\n",
    "- 在函数中需要实现正向传播计算成本和反向传播计算梯度。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def propagate(w, b, X, Y):\n",
    "    \"\"\"\n",
    "    实现前向和后向传播的成本函数及其梯度。\n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 矩阵类型为（num_px * num_px * 3，训练数量）\n",
    "        Y  - 真正的“标签”矢量（如果非猫则为0，如果是猫则为1），矩阵维度为(1,训练数据数量)\n",
    "    返回：\n",
    "        cost- 逻辑回归的负对数似然成本\n",
    "        dw  - 相对于w的损失梯度，因此与w相同的形状\n",
    "        db  - 相对于b的损失梯度，因此与b的形状相同\n",
    "    \"\"\"\n",
    "    m = X.shape[1]\n",
    "\n",
    "    #正向传播\n",
    "    A = sigmoid(np.dot(w.T,X) + b) #计算激活值。\n",
    "    cost = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A))) #计算成本。\n",
    "\n",
    "    #反向传播\n",
    "    dw = (1 / m) * np.dot(X, (A - Y).T) \n",
    "    db = (1 / m) * np.sum(A - Y) \n",
    "\n",
    "    #使用断言确保我的数据是正确的\n",
    "    assert(dw.shape == w.shape)\n",
    "    assert(db.dtype == float)\n",
    "    cost = np.squeeze(cost)\n",
    "    assert(cost.shape == ())\n",
    "\n",
    "    #创建一个字典，把dw和db保存起来。\n",
    "    grads = {\n",
    "                \"dw\": dw,\n",
    "                \"db\": db\n",
    "             }\n",
    "    return (grads , cost)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试propagate====================\n",
      "dw = [[0.99993216]\n",
      " [1.99980262]]\n",
      "db = 0.49993523062470574\n",
      "cost = 6.000064773192205\n"
     ]
    }
   ],
   "source": [
    "#测试一下propagate\n",
    "print(\"====================测试propagate====================\")\n",
    "#初始化一些参数\n",
    "w, b, X, Y = np.array([[1], [2]]), 2, np.array([[1,2], [3,4]]), np.array([[1, 0]])\n",
    "grads, cost = propagate(w, b, X, Y)\n",
    "print (\"dw = \" + str(grads[\"dw\"]))\n",
    "print (\"db = \" + str(grads[\"db\"]))\n",
    "print (\"cost = \" + str(cost))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 优化函数<span id='3'></span>\n",
    "接下来，你需要**定义optimize函数通过使用propagate函数计算成本和梯度来最小化成本，并学习最优参数w和b**。对于参数 $\\theta$ ，更新规则是 $ \\theta = \\theta - \\alpha \\text{ } d\\theta$，其中 $\\alpha$ 是学习率。\n",
    "\n",
    "\n",
    "**要点**：\n",
    "- 参数列表和返回列表如函数说明中所示，注意返回值的数据类型；\n",
    "- 我们需要写下两个步骤并遍历它们：\n",
    "    1. 计算当前参数的成本和梯度，使用propagate（）。\n",
    "    2. 使用w和b的梯度下降法则更新参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def optimize(w , b , X , Y , num_iterations , learning_rate , print_cost = False):\n",
    "    \"\"\"\n",
    "    此函数通过运行梯度下降算法来优化w和b\n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 维度为（num_px * num_px * 3，训练数据的数量）的数组。\n",
    "        Y  - 真正的“标签”矢量（如果非猫则为0，如果是猫则为1），矩阵维度为(1,训练数据的数量)\n",
    "        num_iterations  - 优化循环的迭代次数\n",
    "        learning_rate  - 梯度下降更新规则的学习率\n",
    "        print_cost  - 每100步打印一次损失值\n",
    "    返回：\n",
    "        params  - 包含权重w和偏差b的`字典`\n",
    "        grads  - 包含权重和偏差相对于成本函数的梯度的`字典`\n",
    "        costs - 优化期间计算的所有成本`列表`，将用于绘制学习曲线。\n",
    "    \"\"\"\n",
    "\n",
    "    costs = []\n",
    "\n",
    "    for i in range(num_iterations):\n",
    "\n",
    "        grads, cost = propagate(w, b, X, Y)\n",
    "\n",
    "        dw = grads[\"dw\"]\n",
    "        db = grads[\"db\"]\n",
    "\n",
    "        w = w - learning_rate * dw\n",
    "        b = b - learning_rate * db\n",
    "\n",
    "        #记录成本\n",
    "        if i % 100 == 0:\n",
    "            costs.append(cost)\n",
    "        #打印成本数据\n",
    "        if (print_cost) and (i % 100 == 0):\n",
    "            print(\"迭代的次数: %i ， 误差值： %f\" % (i,cost))\n",
    "\n",
    "    params  = {\n",
    "                \"w\" : w,\n",
    "                \"b\" : b }\n",
    "    grads = {\n",
    "            \"dw\": dw,\n",
    "            \"db\": db } \n",
    "    return (params , grads , costs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试optimize====================\n",
      "w = [[0.1124579 ]\n",
      " [0.23106775]]\n",
      "b = 1.5593049248448891\n",
      "dw = [[0.90158428]\n",
      " [1.76250842]]\n",
      "db = 0.4304620716786828\n"
     ]
    }
   ],
   "source": [
    "#测试optimize\n",
    "print(\"====================测试optimize====================\")\n",
    "w, b, X, Y = np.array([[1], [2]]), 2, np.array([[1,2], [3,4]]), np.array([[1, 0]])\n",
    "params , grads , costs = optimize(w , b , X , Y , num_iterations=100 , learning_rate = 0.009 , print_cost = False)\n",
    "print (\"w = \" + str(params[\"w\"]))\n",
    "print (\"b = \" + str(params[\"b\"]))\n",
    "print (\"dw = \" + str(grads[\"dw\"]))\n",
    "print (\"db = \" + str(grads[\"db\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5 实现预测函数<span id='4'></span>\n",
    "通过优化函数可以输出已学习的w和b的值，我们可以使用w和b来预测数据集X的标签。\n",
    "\n",
    "接下来，你需要**实现预测函数predict（）**。\n",
    "\n",
    "计算预测有两个步骤：\n",
    "1. 计算$\\bar{Y}=A=\\sigma(w^TX+b)$\n",
    "2. 将a的值变为0（如果激活值<= 0.5）或者为1（如果激活值> 0.5）\n",
    "\n",
    "然后将预测值存储在向量Y_prediction中。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "###在这里填入代码###\n",
    "def predict(w , b , X ):\n",
    "    \"\"\"\n",
    "    使用学习逻辑回归参数logistic （w，b）预测标签是0还是1，\n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 维度为（num_px * num_px * 3，训练数据的数量）的数据\n",
    "    返回：\n",
    "        Y_prediction  - 包含X中所有图片的所有预测【0 | 1】的一个numpy数组（向量）\n",
    "    \"\"\"\n",
    "\n",
    "    m  = X.shape[1] #图片的数量\n",
    "    Y_prediction = np.zeros((1,m)) \n",
    "    w = w.reshape(X.shape[0],1)\n",
    "\n",
    "    #计预测猫在图片中出现的概率\n",
    "    A = sigmoid(np.dot(w.T , X) + b)\n",
    "    for i in range(A.shape[1]):\n",
    "        #将概率a [0，i]转换为实际预测p [0，i]\n",
    "        Y_prediction[0,i] = 1 if A[0,i] > 0.5 else 0\n",
    "    #使用断言\n",
    "    assert(Y_prediction.shape == (1,m))\n",
    "\n",
    "    return Y_prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试predict====================\n",
      "predictions = [[1. 1.]]\n"
     ]
    }
   ],
   "source": [
    "#测试predict\n",
    "print(\"====================测试predict====================\")\n",
    "w, b, X, Y = np.array([[1], [2]]), 2, np.array([[1,2], [3,4]]), np.array([[1, 0]])\n",
    "print(\"predictions = \" + str(predict(w, b, X)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.6 构建神经网络模型<span id='4'></span>\n",
    "\n",
    "回顾搭建神经网络模型的步骤： \n",
    "1. 定义模型结构（例如输入特征的数量） \n",
    "2. 初始化模型的参数 \n",
    "3. 循环：\n",
    "\n",
    "    1. 计算当前损失（正向传播）\n",
    "    2. 计算当前梯度（反向传播）\n",
    "    3. 更新参数（梯度下降）\n",
    "    \n",
    "我们目前已经实现了参数的初始化、成本和梯度的计算、参数更新函数以及预测函数。接下来，你需要**搭建完整的神经网络模型，定义model()函数**。\n",
    "\n",
    "**要点**：\n",
    "- 参数列表和返回列表如函数说明所示；\n",
    "- 需要分别计算训练集和测试集预测的准确率并输出。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def model(X_train , Y_train , X_test , Y_test , num_iterations = 2000 , learning_rate = 0.5 , print_cost = False):\n",
    "    \"\"\"\n",
    "    通过调用之前实现的函数来构建逻辑回归模型\n",
    "\n",
    "    参数：\n",
    "        X_train  - numpy的数组,维度为（num_px * num_px * 3，m_train）的训练集\n",
    "        Y_train  - numpy的数组,维度为（1，m_train）（矢量）的训练标签集\n",
    "        X_test   - numpy的数组,维度为（num_px * num_px * 3，m_test）的测试集\n",
    "        Y_test   - numpy的数组,维度为（1，m_test）的（向量）的测试标签集\n",
    "        num_iterations  - 表示用于优化参数的迭代次数的超参数\n",
    "        learning_rate  - 表示optimize（）更新规则中使用的学习速率的超参数\n",
    "        print_cost  - 设置为true以每100次迭代打印成本\n",
    "\n",
    "    返回：\n",
    "        d  - 包含有关模型信息的字典。\n",
    "    \"\"\"\n",
    "    w , b = initialize_with_zeros(X_train.shape[0])\n",
    "\n",
    "    parameters , grads , costs = optimize(w , b , X_train , Y_train,num_iterations , learning_rate , print_cost)\n",
    "\n",
    "    #从字典“参数”中检索参数w和b\n",
    "    w , b = parameters[\"w\"] , parameters[\"b\"]\n",
    "\n",
    "    #预测测试/训练集的例子\n",
    "    Y_prediction_test = predict(w , b, X_test)\n",
    "    Y_prediction_train = predict(w , b, X_train)\n",
    "\n",
    "    #打印训练后的准确性\n",
    "    print(\"训练集准确性：\"  , format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100) ,\"%\")\n",
    "    print(\"测试集准确性：\"  , format(100 - np.mean(np.abs(Y_prediction_test - Y_test)) * 100) ,\"%\")\n",
    "\n",
    "    d = {\n",
    "            \"costs\" : costs,\n",
    "            \"Y_prediction_test\" : Y_prediction_test,\n",
    "            \"Y_prediciton_train\" : Y_prediction_train,\n",
    "            \"w\" : w,\n",
    "            \"b\" : b,\n",
    "            \"learning_rate\" : learning_rate,\n",
    "            \"num_iterations\" : num_iterations }\n",
    "    return d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试model====================\n",
      "迭代的次数: 0 ， 误差值： 0.693147\n",
      "迭代的次数: 100 ， 误差值： 0.584508\n",
      "迭代的次数: 200 ， 误差值： 0.466949\n",
      "迭代的次数: 300 ， 误差值： 0.376007\n",
      "迭代的次数: 400 ， 误差值： 0.331463\n",
      "迭代的次数: 500 ， 误差值： 0.303273\n",
      "迭代的次数: 600 ， 误差值： 0.279880\n",
      "迭代的次数: 700 ， 误差值： 0.260042\n",
      "迭代的次数: 800 ， 误差值： 0.242941\n",
      "迭代的次数: 900 ， 误差值： 0.228004\n",
      "迭代的次数: 1000 ， 误差值： 0.214820\n",
      "迭代的次数: 1100 ， 误差值： 0.203078\n",
      "迭代的次数: 1200 ， 误差值： 0.192544\n",
      "迭代的次数: 1300 ， 误差值： 0.183033\n",
      "迭代的次数: 1400 ， 误差值： 0.174399\n",
      "迭代的次数: 1500 ， 误差值： 0.166521\n",
      "迭代的次数: 1600 ， 误差值： 0.159305\n",
      "迭代的次数: 1700 ， 误差值： 0.152667\n",
      "迭代的次数: 1800 ， 误差值： 0.146542\n",
      "迭代的次数: 1900 ， 误差值： 0.140872\n",
      "训练集准确性： 99.04306220095694 %\n",
      "测试集准确性： 70.0 %\n"
     ]
    }
   ],
   "source": [
    "print(\"====================测试model====================\")     \n",
    "#这里加载的是真实的数据，请参见上面的代码部分。\n",
    "d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 2000, learning_rate = 0.005, print_cost = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 模型结果分析\n",
    "在上述的模型结果中，我们可以看到模型在训练集和测试集上的不同表现。当我们修改学习率和迭代次数时，准确率会有些许的变化。现在我们将模型训练过程中的成本优化过程可视化，直观的观察模型训练过程。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制图\n",
    "costs = np.squeeze(d['costs'])\n",
    "plt.plot(costs)\n",
    "plt.ylabel('cost')\n",
    "plt.xlabel('iterations (per hundreds)')\n",
    "plt.title(\"Learning rate =\" + str(d[\"learning_rate\"]))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到在每次的迭代过程中，成本值都在降低，说明模型参数正在被学习。\n",
    "### 3.1 学习率的选择\n",
    "\n",
    "在模型参数中有一个“学习率”的概念，学习率决定了模型更新参数的速度，如果学习率设置的过高，模型可能会“超过”最小值，反之，则会造成过慢的收敛速度。\n",
    "接下来，可以比较一下在你的模型上选用不同学习率时模型的变化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "learning rate is: 0.01\n",
      "训练集准确性： 99.52153110047847 %\n",
      "测试集准确性： 68.0 %\n",
      "\n",
      "-------------------------------------------------------\n",
      "\n",
      "learning rate is: 0.001\n",
      "训练集准确性： 88.99521531100478 %\n",
      "测试集准确性： 64.0 %\n",
      "\n",
      "-------------------------------------------------------\n",
      "\n",
      "learning rate is: 0.0001\n",
      "训练集准确性： 68.42105263157895 %\n",
      "测试集准确性： 36.0 %\n",
      "\n",
      "-------------------------------------------------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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Dz7I3r177du+ffuIi4ujc+fO9uPKhw+AHTt2MGXKFMaPH88333zDnj17ePbZZ7FYLPW6vqIoFfr/lFd+v4ODQ6XXbDYboN4e2717N2vXrqVDhw78/e9/p2/fvly4cKFetQghGp+03AghmpTJZMJqtVbYN2DAAP744w+6dOlSr/fatm0bYWFhPPvss/Z9Z86cqfV6l+rRowcfffQReXl59gC1bds29Ho9Xbt2rXM9RqORa665hmuuuYb58+fj6enJzz//zC233FKPTyWEaGzSciOEaFLh4eFs3ryZhIQE0tLSAHXE06+//srDDz/M3r17iYuL46uvvmLWrFk1vleXLl2Ij4/nv//9LydOnODtt9/m888/r3S9U6dOsXfvXtLS0igqKqr0PlOnTsXR0ZG77rqLgwcPsnHjRmbNmsW0adPst6Rq88033/D222+zd+9ezpw5w6pVq7DZbERFRdXxOyOEaCoSboQQTWrBggWcPn2azp074+fnB0CfPn3YtGkTcXFxjBgxgv79+/Pcc8/RoUOHGt9rwoQJPPbYYzzyyCP069eP7du320dRlfnzn//Mddddx1VXXYWfnx9r166t9D7Ozs788MMPZGRkcMUVVzBp0iSuvvpqlixZUufP5enpyWeffcaYMWPo3r07y5cvZ+3atfTs2bPO7yGEaBoyQ7EQQggh2hRpuRFCCCFEmyLhRgghhBBtioQbIYQQQrQpEm6EEEII0aZIuBFCCCFEmyLhRgghhBBtioQbIYQQQrQpEm6EEEII0aZIuBFCCCFEmyLhRgghhBBtioQbIYQQQrQp/w/AbKHmX3m8aQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learning_rates = [0.01, 0.001, 0.0001]\n",
    "models = {}\n",
    "for i in learning_rates:\n",
    "    print (\"learning rate is: \" + str(i))\n",
    "    models[str(i)] = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 1500, learning_rate = i, print_cost = False)\n",
    "    print ('\\n' + \"-------------------------------------------------------\" + '\\n')\n",
    "\n",
    "for i in learning_rates:\n",
    "    plt.plot(np.squeeze(models[str(i)][\"costs\"]), label= str(models[str(i)][\"learning_rate\"]))\n",
    "\n",
    "plt.ylabel('cost')\n",
    "plt.xlabel('iterations')\n",
    "\n",
    "legend = plt.legend(loc='upper center', shadow=True)\n",
    "frame = legend.get_frame()\n",
    "frame.set_facecolor('0.90')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
